package com.cy.pj.notice.jdbc;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import javax.sql.DataSource;
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Repository //此注解一般用于数据访问对象的具体实现类
public class NoticeJdbcImpl implements NoticeJdbc {
    @Autowired
    private DataSource dataSource;//DataSource是数据源对象

    @Override
    public int insertNotice(String sql,Object[]values) throws SQLException {
        //1.建立连接（负责与数据库进行通讯）
        Connection con = dataSource.getConnection();
        //2.创建statement(sql传输器——>负责将sql发送到数据库端）
        PreparedStatement st = con.prepareStatement(sql);

        for(int i = 0;i<values.length;i++){
            st.setObject(i+1, values[i]);
        }
        st.execute();
        System.out.println("插入完成");

        st.close();
        con.close();//将连接返回到池中
        return 0;

    }

    @Override
    public List<Map<String, Object>> selectNotices(String sql) throws SQLException {
        //1.获取链接
        Connection cn = dataSource.getConnection();

        //2.创建Statement
        PreparedStatement ps = cn.prepareStatement(sql);

        //3.发送sql
        ps.setInt(1, 110);

        ResultSet rs = ps.executeQuery();//拿到一个结果集对象
        Map<String, Object> map = new HashMap<>();
        //4.处理结果
        ResultSetMetaData rm = rs.getMetaData();//获取结果集对应的元数据（描述数据的数据）
        int columnCount = rm.getColumnCount();//得到元数据的总个数
        List<Map<String, Object>> list = new ArrayList<>();

        while (rs.next()) {//每次查找结果集的一行
            for (int i = 1; i <= columnCount; i++) {//遍历每行的每一列
                String column = rm.getColumnName(i);//得到每个字段名
                map.put(column, rs.getObject(column)); //前者拿到字段名，后者拿到对应的字段值
            }
            System.out.println(map);
            list.add(map);
        }
        //5.释放资源
        rs.close();
        ps.close();
        cn.close();

        return list;

    }

}
